﻿using FileSC.Configs;
using FileSC.WEBService.Dto;
using FileSC.WEBService.Plugins;
using System;
using TouchSocket.Core;
using TouchSocket.Http;
using TouchSocket.Sockets;

namespace FileSC.WEBService
{
    public class FileSCHttpServer : IFileSCHttpServer
    {
        internal HttpService httpService;

        public async void Start()
        {
            var allow_cors = AppConfig.ReadGobalValue<string>("跨域请求") == "支持";
            var uri = AppConfig.ReadGobalValue<string>("监听地址");
            if (AppConfig.YesOrNo("本地回环"))
            {
                uri = $"127.{uri}";
            }
            httpService = new HttpService();
            await httpService.SetupAsync(new TouchSocketConfig()//加载配置
                 .SetListenIPHosts(uri)
                 .ConfigureContainer(a =>
                 {
                     a.AddConsoleLogger();

                     if (allow_cors)
                     {
                         //添加跨域服务
                         a.AddCors(corsOption =>
                         {
                             var cors_tag = AppConfig.ReadGobalValue<string>("跨域名称");
                             var cors_host = AppConfig.ReadGobalValue<string>("跨域目标");

                             //添加跨域策略，后续使用policyName即可应用跨域策略。
                             corsOption.Add(cors_tag, corsBuilder =>
                             {
                                 corsBuilder.AllowAnyMethod()
                                     .WithOrigin(cors_host);
                             });
                         });
                     }
                 })
                 .ConfigurePlugins(a =>
                 {
                     if (allow_cors)
                     {
                         var cors_tag = AppConfig.ReadGobalValue<string>("跨域名称");
                         //应用名称为cors的跨域策略。
                         a.UseCors(cors_tag);
                     }
                     //此处添加插件逻辑，插件可以使用PluginBase类实现IHttpPlugin接口完成。
                     //这里使用委托直接完成
                     a.Add<TestPlug>();
                     a.Add<StoragePlug>();
                     a.Add<StatusPlug>();

                     //default插件应该最后添加，其作用是
                     //1、为找不到的路由返回404
                     //2、处理header为Option的探视跨域请求。
                     a.UseDefaultHttpServicePlugin();
                 }));

            await httpService.StartAsync();
        }

        public async void Stop()
        {
            await httpService.StopAsync();
        }
    }
}
